"""
栈模型的顺序存储
思想:
	1.列表即顺序存储,但功能多, 不符合栈模型特征
	2.利用列表 将其
"""

class StackError(Exception):
	pass

class Stack:
	def __init__(self):
		"""
		空列表就是栈的存储空间
		列表的最后一个元素作为栈顶
		"""
		self._elems = []

	# 判断列表是否为空
	def is_empty(self):
		"""
		判断列表是否为空
		:return: True(空), False(不为空)
		"""
		return self._elems == []

	# 入栈
	def push(self, value):
		self._elems.append(value)

	# 出栈
	def pop(self):
		"""只能从最后一个出栈"""
		if self.is_empty():     # 如果True(是),则异常
			raise StackError("栈为空!")
		return self._elems.pop()    # 弹出并返回

	# 查看栈顶元素
	def top(self):
		"""查看栈顶元素"""
		if self.is_empty():
			raise StackError("栈为空!")
		return self._elems[-1]

if __name__ == '__main__':
	st = Stack()    # 初始化栈
	st.push(10)
	st.push(20)
	st.push(30)# 入
	while not st.is_empty():
		print(st.pop())# 出